Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[항공사 웹사이트의 컴포넌트 접근성 높이기] 초코(강다빈) 미션 제출합니다 #121

Merged
merged 11 commits into from
Oct 4, 2024

Conversation

00kang
Copy link
Member

@00kang 00kang commented Sep 30, 2024

안녕하세요 수야~ 초코입니다.
리뷰어로 만나는 건 처음인데, 리뷰 잘 부탁드립니다 :>


🔥 결과

  • 배포한 페이지 접근 경로(GitHub Pages): 🔗 바로가기
  • 스크린 리더 화면 녹화 영상 (before / after)
    (참고: 갤럭시 기준 휴대폰 녹화 이슈가 있어서,, 크루의 도움으로 영상을 녹화해서 AFTER밖에 없습니다 ㅠ)
default.mp4

✅ 개선 작업 목록

1 컴포넌트 접근성 개선 - 이미지 캐로셀

  • 스크린 리더가 캐로셀의 전체 아이템 수를 읽을 수 있어야 합니다.
  • 스크린 리더가 이미지 캐로셀 내 각 아이템 정보를 읽을 수 있어야 합니다.
    • 여행지, 좌석 유형, 가격 정보를 한번에 읽을 수 있어야 합니다.
    • 이전/다음 아이템으로 이동하고 현재 보이는 아이템의 정보를 읽을 수 있어야 합니다.
  • 각 아이템을 선택하면 각각에 맞는 링크로 이동할 수 있어야 합니다.

2 페이지 접근성 개선

  • 페이지를 하나의 문서로 읽을 수 있어야 합니다.
    • 페이지에 적절한 제목(title)을 제공하세요. 제목은 페이지의 주요 내용을 간결하게 설명해야 합니다.
    • 페이지의 주요 영역을 시맨틱 태그를 사용해 명확히 구분해 주세요
    • 헤딩을 논리적인 순서로 사용해 페이지 구조를 명확히 해주세요
  • 키보드 사용자를 위해 페이지 최상단에 '본문으로 바로가기' 링크를 제공해 반복되는 메뉴를 건너뛸 수 있게 해주세요

🧐 우리 팀의 접근성 체크리스트

서비스 소개

자주 사용되는 기능 플로우

  • 로그인 -> 모집 중인 방 리스트 확인 -> 방 참여 -> 코드리뷰 진행(깃허브) -> 상대방(리뷰어/리뷰이) 피드백 작성

체크리스트 v1.

  • 로그인 시 성공 혹은 실패의 메시지를 적절하게 제공한다.
  • 메인페이지에서 배너를 건너뛰고 "참여중-모집중-진행중-종료"의 탭으로 이동할 수 있어야 한다.
  • 모집 중인 방 리스트에서 방 카드 컴포넌트를 선택하면 모달을 띄우기 전에, "제목, 키워드, 모집 마감일" 등의 정보를 알 수 있어야 한다. 단, 이미지 정보는 제공하지 않는다.
  • 해당 방 카드 컴포넌트를 선택하면 참여하기 위한 모달이 뜨고, 모달 내부의 상세 정보에만 포커싱이 되어야 한다.
  • 모달의 참여하기 버튼을 클릭하면 상세 페이지로 이동되므로, 이를 알려줄 수 있어야 한다.
  • 코드리뷰 과정 진행 이후, 상대방에 대한 피드백을 작성하는데 이때도 모달에만 포커싱이 되어야 한다.

해당 플로우의 각 단계에 대한 질문 (개인적인 생각)

1. 화면을 볼 수 없는 사용자가 이 단계를 완료할 수 있는가?

  • 로그인:
    • 적절한 레이블과 오류 메시지가 제공된다면 완료 가능
  • 모집 중인 방 리스트 확인:
    • 리스트가 적절히 구조화되어 있고, 각 항목에 대한 정보가 명확하게 제공된다면 가능
    • 다만, 각 방에 대한 중요 정보(제목, 키워드, 참여 인원 수, 모집 마감일) 등이 같이 제공되어야 하기 때문에 복잡할 수 있음
  • 방 참여:
    • 방 리스트 클릭시 나타나는 모달에만 포커싱이 된다면 가능
  • 코드리뷰 진행(깃허브):
    • 깃허브의 접근성에 따라 다름
  • 상대방 피드백 작성:
    • 상세 페이지에서 피드백 작성 폼 모달에만 포커싱이 된다면 가능

2. 이 단계에서 제공하는 정보나 지시 사항이 모든 사용자에게 명확한가?
전반적으로 프로세스가 길고, 각 정보들이 방대하기 때문에 명확하게 전달이 될지 의문이다.

3. 전체적인 의견
사실 코드리뷰와 코드리뷰 활동을 기반으로 서로 피드백을 해나가며 성장해 나가는 저희 서비스의 목표에 있어서, 누구나 서비스를 사용할 수 있는가? 라는 질문에 당연하게 그렇다. 라고 할 수는 없는 것 같아요. 코드를 작성하는 데 무리가 없어야 하고, 깃허브 서비스에 의존하고 있기 때문에 제약이 많다고 생각해요. 이러한 서비스에서 접근성을 챙겨야 한다면 어느 부분이 제일 중요해 보이는지 수야의 의견이 궁금해요!

@00kang 00kang self-assigned this Sep 30, 2024
Copy link

@cys4585 cys4585 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

접근성 미션 고생 많으셨습니다 초코 👏

접근성 부분은 특히나 자신이 없어서 제 리뷰가 얼마나 도움이 될지 잘 모르겠네요...!

먼저, 배포한 페이지를 모바일 스크린 리더로도 사용해보고 데스크탑 키보드로도 사용해봤는데, 사용성이 좋았습니다!

제가 구현한 부분이랑 다른 부분 위주로 초코의 의도나 생각이 궁금해서 코멘트 남겨두었습니다~

천천히 보시고 답변해주시고, 재리뷰요청 주시면 다시 오겠습니다 :)

Comment on lines 59 to 69
const nextTravel = () => {
const newIndex = (currentIndex + 1) % travelOptions.length;
setCurrentIndex(newIndex);
getCardInfo(newIndex);
};

const prevTravel = () => {
const newIndex = (currentIndex - 1 + travelOptions.length) % travelOptions.length;
setCurrentIndex(newIndex);
getCardInfo(newIndex);
};
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기 getCardInfo는 필요한 코드인가요...?🤔

Copy link
Member Author

@00kang 00kang Oct 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

으음,, 캐러셀 이동 버튼을 클릭해도 getCardInfo 로 문자열을 가지고 와도 스크린 리더가 파악하지 못하겠군요!
이 코드의 aria 속성으로 스크린 리더가 작동하고 있는 것 같아서 삭제했습니다!
짚어주셔서 감사해요 :>

{travelOptions.map((option, index) => (
  <button
    key={index}
    className={`${styles.card} ${index === currentIndex ? styles.cardActive : ''}`}
    onClick={() => handleCardClick(option.link)}
    role="button"
    aria-live="polite"
    aria-label={getCardInfo(index)}
  >

Comment on lines +77 to +83
<button
className={`${styles.navButton} ${styles.navButtonPrev}`}
onClick={prevTravel}
aria-label="이전 여행 상품"
>
<img src={chevronLeft} className={styles.navButtonIcon} alt="" />
</button>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alt="이전 여행 상품"을 하는 대신 이렇게 구현했을 떄 차이나 장점이 있을까요??

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 img 자체보다는 button에 초점을 맞춰야 되는 것 같아서 aria-label 속성을 추가했어요. 이에 대해서 자료를 더 찾아보니 이렇게 사용하기를 권장하고 있더라고요.

예를 들어 SVG 아이콘만 표시하는 HTML 버튼 요소는 aria-label보조 기술 사용자에게 동작을 명확히 설명하기 위해 를 사용할 수 있습니다.

 <button aria-label="Search"><img src="search-icon.svg" alt=""></button>

링크 첨부해둘게요!

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

img보다 button에 초점을 맞춰야된다는 게 설득력이 있네요! 자료 공유도 감사합니다 😀

Comment on lines +50 to +57
const getCardInfo = (index: number) => {
const option = travelOptions[index];

return `${travelOptions.length}개의 여행 상품 중 ${index + 1}번째 상품.
${option.departure} 출발 ${option.destination} 도착,
${option.type},
가격 ${option.price}원. 선택하면 예약 페이지로 이동합니다.`;
};
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

초코의 TravelSection을 스크린 리더로 들으니 확실히 가청성이 좋네요~ 문장도 커스터마이징 되어있고, 적절히 끊어서 읽어줘서 듣기에 좋았습니다 👍

Comment on lines +97 to +99
<p className={`${styles.cardTitle} heading-3-text`}>
{option.departure} - {option.destination}
</p>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 놓쳤다가 코드리뷰 하면서 든 생각인데, 이 p 태그는 h3 태그로 바꿔주는 게 적절하려나요..?🤔

Copy link
Member Author

@00kang 00kang Oct 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

h3으로 태그를 수정하면 이렇게 label들이 잡히게 되더라고요. p태그가 더 적절하지 않을까요?

p 태그 h3 태그
image image

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아하... 저는 heading-3-text 클래스를 보고 앗차했는데, p 태그가 적절하겠군요..! 죄송합니다..ㅎㅎㅎ

src/App.tsx Outdated
<div className="App">
<SpinButton />
<div className={styles.app}>
<title>A11Y AIRLINE - 안전하고 쾌적한 여행</title>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오? title 태그를 여기에 두셨군요? 의도가 있으신가요??

Copy link
Member Author

@00kang 00kang Oct 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

html의 title을 바꿀 생각을 못하고 여기에 넣어버렸네요 ㅎㅎ 수정했습니당

@00kang
Copy link
Member Author

00kang commented Oct 1, 2024

수야, 소소하게 코멘트 반영해보았습니다!

혹시 시간 되시면 코레아 서비스의 접근성 관련 PR 내용 읽고 답해주실 수 있을까요??
타인의 시선에서는 어떤지 궁금해서 질문드려요

Copy link

@cys4585 cys4585 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

늦어서 죄송합니다..!
코멘트로 답변주셔서 감사합니다! 덕분에 접근성에 대해서 더 잘 알게된 것 같아요 👍

코레아 서비스를 스크린모드로 사용해보면서 느낀 것들을 토대로 피드백을 적어봤습니다! 접근성에 대해 전문성이 없는 사람의 피드백임을 감안해주십쇼!! 😁

  1. 최초 서비스 접근: ‘CoReA’를 아나운서가 ‘코리아’라고 읽어줍니다..ㅎ 사소하다면 사소하지만, 서비스의 이름 자체의 발음은 스크린리더에게 명확히 전달해주면 좋지 않을까 조심스레 생각해봅니다..!
  2. 로그인: github o auth인 것을 표현해주면 더 좋을 것 같습니다! 이후 github 로그인 프로세스는 github에서 관리하는 부분이라 어쩔 수 없을 것 같고, 로그인 후 돌아왔을 때 초코의 생각처럼 피드백이 있으면 더욱 좋을 것 같습니다!
  3. 모임 목록:
    • 프론트엔드 방만 보려고 필터링 selectbox를 클릭했을 때 포커싱이 풀렸습니다!
    • ‘모집 중’을 읽어주는 걸 듣고 더블클릭으로 모달을 켰는데, 포커싱이 안돼서 스크린리더가 전혀 읽어주지 못했어요. 😭
  4. 방 참여 이후는 플로우를 경험해볼 수 없는 것 같아서 여기까지만 진행했습니다.

초코의 질문에 제 생각을 말씀드려보자면, 핵심 플로우 상에서 모달로 제공하는 UI가 주요한 것 같아요. 로그인이나 모임 목록을 들을 때는 불편할 순 있어도 어찌저찌 쓸 순 있을 것 같은데, 모달은 시각장애인들에게 많은 혼란을 줄 수도 있겠다는 생각이 들었어요.
모달이 렌더링될 때 스크린리더가 읽어줄 수 있는 있도록 개선하는 게 가장 우선순위가 높다고 생각합니다!

여기까지 리뷰를 마무리하고 Approve를 드리려고 합니다. 고생하셨습니다! 👏

@00kang
Copy link
Member Author

00kang commented Oct 4, 2024

우와아 코레아 서비스를 직접 사용해보시고 정성껏 남겨주신 코멘트라는 게 너무 잘 느껴지네요.
바쁜 와중에 감사합니다 :)

@cys4585 cys4585 merged commit 4458eab into woowacourse:00kang Oct 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants